package own.stu.jobgib.playown.tools.jprofile;

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        Test t = new Test();
        t.testOOM(4);
    }

    private static int M_1 = 1024 * 1024;

    /*
     oomTest
     -Xms16m -Xmx16m -XX:+HeapDumpOnOutOfMemoryError

     dump 出来的 .hprof 文件 用jprofile打开
     堆遍历器：(当前对象集，线程转储）中可以看到大对象的分布，已经哪个线程出现的oom（能够精准定位到具体的oom代码行数）
     */
    private void testOOM(int threadNum) {
        for (int i = 0; i < threadNum; i++) {
            new Thread(() -> {
                try {
                    List<byte[]> list = new ArrayList<>();
                    for (int j = 0; j < 10; j++) {
                        list.add(new byte[M_1]);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }, "t - " + i).start();
        }
    }
}
